home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1997 / MacHack 1997.toast / Hacks / Hacks ’96 / Venus / ValueControl.cc < prev    next >
Text File  |  1996-06-22  |  2KB  |  85 lines

  1. /*
  2.  ***********************************************************************
  3.  *
  4.  *                            Value Control
  5.  *             Slider with a window to show the current value
  6.  *                     Behaves like a glorified integer
  7.  *
  8.  ***********************************************************************
  9.  */
  10.  
  11. #include "ValueControl.h"
  12. #include "mymenv.h"
  13.  
  14.  
  15.                                         // Late binding constructor
  16. void ValueControl::bind(const ModelessDialog::ControlItem& control_item,
  17.               const ModelessDialog::NumberItem& value_item)
  18. {
  19.   BasicControl::bind(control_item);
  20.   show_val_item = new ModelessDialog::NumberItem(value_item);        // Have to make our own copy
  21.   show_curr_value();
  22. }
  23.  
  24. ValueControl::~ValueControl(void)
  25. {
  26.   if( show_val_item != nil )
  27.     delete show_val_item;
  28. }
  29.  
  30.                                     // Handle mouse-down event within a vlue control
  31.                                     // Track the mouse and adjust the control values
  32.                                     // Return FALSE if the control value was changed
  33.                                     // (and therefore, more attention needed)
  34. Boolean ValueControl::handle_click(void)
  35. {
  36.   return FALSE;
  37. #if 0
  38.   ControlHandle ctl_handle = our_control();
  39.   Point mouse_pt;                    // Get the mouse position in the control
  40.   {                                    // window local coordinates
  41.     SetPort();
  42.     GetMouse(&mouse_pt);
  43.   }
  44. #endif
  45. }
  46.  
  47.  
  48.                                     // Control Track action procedure
  49.                                     // Figure out how the control value is to be changed
  50.                                     // when the user clicked PgUp/PgDn/ArrowUp/ArrowDn areas
  51.                                     // of the scrollbar
  52.                                     // In all other cases, simply redisplay the current value
  53.                                     // (in case the indicator was moved)
  54. void ValueControl::track_action(const int part_no)
  55. {
  56.   ControlHandle ctl_handle = our_control();
  57.   const int curr_value = GetControlValue(ctl_handle);
  58.   int change = 0;
  59.   switch(part_no)
  60.   {
  61.     case inUpButton:
  62.          change = - small_increment;
  63.          break;
  64.     case inDownButton:
  65.          change = small_increment;
  66.          break;
  67.     case inPageUp:
  68.          change = - big_increment;
  69.          break;
  70.     case inPageDown:
  71.          change = big_increment;
  72.          break;
  73.   }
  74.   if( change != 0 )
  75.     set_value(curr_value + change);
  76.   show_curr_value();
  77. }
  78.  
  79.                                         // Show the current value of the control in a special
  80.                                         // window
  81. void ValueControl::show_curr_value(void)
  82. {
  83.   show_val_item->draw((int)*this);
  84. }
  85.